package ltd.trackan.messagecenter.utils;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;

import lombok.extern.slf4j.Slf4j;
import ltd.trackan.messagecenter.model.entity.ApiFox;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;

/**
 * @author wxa
 */
@Slf4j
@Component
public class SendPushPlusMessageUtils {
    @Value("${pushPlus.token}")
    private String FIXED_TOKEN;
    @Value("${pushPlus.mode}")
    private String FIXED_MODE;
    @Value("${pushPlus.group}")
    private String FIXED_MODE_GROUP;
    
    public void send(String title, String content) {
        title += "(信息管理)";
        // 请求内容
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("token", FIXED_TOKEN);
        jsonObject.put("title", title);
        jsonObject.put("content", content);
        // 请求,并获得返回的状态码
        pushPlusSend(JSON.toJSONString(jsonObject));
    }
    
    public void send(String token,String title, String content) {
        title += "(信息管理)";
        // 请求内容
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("token", token);
        jsonObject.put("title", title);
        jsonObject.put("content", content);
        // 请求,并获得返回的状态码
        pushPlusSend(JSON.toJSONString(jsonObject));
    }
    
    // pushplus请求回调检测
    private void pushPlusSend(String json) {
        ApiFox apiFox = postRequest("http://www.pushplus.plus/send", json);
        if (apiFox == null || apiFox.getCode() != 200) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("token", FIXED_TOKEN);
            jsonObject.put("title", "pushPlus发送出现错误警告");
            jsonObject.put("content", apiFox == null ? "请求参数不正确！" : apiFox);
            jsonObject.put("channel", FIXED_MODE);
            jsonObject.put("webhook", FIXED_MODE_GROUP);
            postRequest("http://www.pushplus.plus/send/", JSON.toJSONString(jsonObject));
        }
    }
    
    // 使用 WebClientUtils 发送 POST 请求
    private ApiFox postRequest(String url, String json) {
        if (url == null || url.isEmpty() || json == null || json.isEmpty()) {
            return null;
        }
        
        try {
            // 调用 WebClientUtils 的 sendBody 方法发送请求
            String response = WebClient.create()
                    .post()
                    .uri("https://www.pushplus.plus/send")
                    .body(BodyInserters.fromValue(json))
                    .retrieve()
                    .bodyToMono(String.class)
                    .block();
            JSONObject jsonObject = JSONObject.parseObject(response);
            // 解析响应
            if (jsonObject != null) {
                return new ApiFox(
                        jsonObject.getIntValue("code"),
                        jsonObject.getString("msg"),
                        jsonObject.getString("data")
                );
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            return null;
        }
        return null;
    }
}
